package hello

import (
	"fmt"
	"math"
)

/*
同一个包里的 函数不能重名，即使在不同的go语言文件中
*/

func FuncTest() {
	fmt.Println("------------ FuncTest() --------------")
	r := max(10, 12)
	fmt.Println("call func max() :", r)

	// -- 返回多个参数 --------------
	a, b := swap("Google", "Run-oob")
	fmt.Println(a, b)

	a, b = b, a
	fmt.Println("sample swap:", a, b)

	/* 调用 swap() 函数
	 * &a 指向 a 指针，a 变量的地址
	 * &b 指向 b 指针，b 变量的地址
	 */
	swap2(&a, &b)
	fmt.Println(a, b)

	// -----------------------
	/* 声明函数变量 */
	getSquareRoot := func(x float64) float64 {
		return math.Sqrt(x)
	}

	/* 使用函数 */
	fmt.Println("square: ", getSquareRoot(9))
}

/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
	/* 定义局部变量 */
	var result int

	if num1 > num2 {
		result = num1
	} else {
		result = num2
	}
	return result
}

// 函数返回多个值
func swap(x, y string) (string, string) {
	return y, x
}

/* 定义交换值函数， 引用方式传递值*/
func swap2(x *string, y *string) {
	var temp string
	temp = *x /* 保持 x 地址上的值 */
	*x = *y   /* 将 y 值赋给 x */
	*y = temp /* 将 temp 值赋给 y */
}
